/**
 * @filename:ProorderService Dec 22, 2023
 * @project Wonder Vue Admin Api  1.1.0
 * Copyright(c) 2022 Wonder Co. Ltd. 
 * All right reserved. 
 */
package com.wonder.app.service;
import cn.hutool.json.JSONObject;
import com.vtuzx.core.bean.dto.VtuzxMap;
import com.wonder.app.domain.PrdTaskQty;
import com.wonder.app.domain.Proorder;
import com.wonder.app.domain.Scan;
import com.wonder.app.request.ProorderRequest;
import com.wonder.common.common.AjaxResult;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;
/**   
 * @Description:TODO(生产订单服务层)
 * @version: 1.1.0
 * @author: Wonder
 * 
 */
public interface ProorderService extends IService<Proorder> {

    
    /**
     * 验证生产订单信息
     * 
     * @param proorder
     * @param type
     * @return 结果
     */
    public String validate(Proorder proorder,String type);   
   
	
	 /**
	 * Description:生产订单分页返回
	 * @param request//检索条件
	 * @param page//分页参数
	 * @return IPage<Proorder>   //分页记录
	 */
    public IPage<Proorder> selectList(ProorderRequest request, Page<Proorder> page);


	/**
	 * 获取采购订单详情
	 * @param id
	 * @return
	 */
	VtuzxMap getProorderDetail(String  billNo);

	/**
	 * 反审核生产订单
	 * @param userName
	 * @param id
	 * @return
	 */
	boolean unAuditProorder(String userName, Long id);

	/**
	 * 审核生产订单
	 * @param userName
	 * @param id
	 * @return
	 */
	boolean auditProorder(String userName, Long id);

	/**
	 * 根据任务单号获取领料信息
	 * @param map
	 * @return
	 */
	List<Map<String, Object>> getPickMaterialByTask(JSONObject map);

	/**
	 * 生产订单开工保存员工工时信息
	 * @param map
	 * @return
	 */
	public Boolean prdTaskStart(JSONObject map);

	/**
	 * 生产订单暂停,记录员工工时信息
	 * @param map
	 * @return
	 */
	Boolean prdTaskStop(JSONObject map) throws Exception;

	/**
	 * 生产订单结束,记录员工工时信息
	 * @param map
	 * @return
	 */
	Boolean prdTaskEnd(JSONObject map) throws Exception;

	/**
	 * 同步生产订单
	 */
	void syncProOrder(String endTime)throws Exception;

	/**
	 * 获取生产订单列表pda
	 * @param map
	 * @return
	 */
    Map<String,Object> getProOrderListPda(Map<String, Object> map);

	/**
	 * 获取生产订单信息包含详情(pad)
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 */
	Map<String, Object> getProOrderList(int pageIndex, int pageSize,String startTime,String endTime,String billNo);

	/**
	 * 根据订单号获取用料清单
	 * @param taskBillNo
	 * @return
	 */
    Map<String, Object> getProBom(String taskBillNo);

	/**
	 * 传送带开始扫码
	 * @param map
	 * @return
	 */
	Map<String,Object> startScanCode(Map<String, Object> map);

	/**
	 * 获取传送带追溯扫码的信息
	 * @param map
	 * @return
	 */
	Map<String,Object> getScanCode(Map<String, Object> map);

	/**
	 * 根据订单号获取开工人员信息
	 * @param billNo
	 * @return
	 */
	Map<String, Object> getUserByBillNo(String billNo);

	/**
	 * 传送带结束扫码
	 * @param taskBillNo
	 * @param startTime
	 * @return
	 */
	Boolean endScanCode(Long userId,String userName,String taskBillNo, String startTime,String produceDate,String batchNo);

	/**
	 * pda直接入库
	 * @param header
	 * @param detail
	 * @param produceDate
	 * @return
	 */
	Boolean inStockPda( Long userId,String userName, Map<String, Object> header,  String produceDate);

	/**
	 * 修改订单工时信息
	 * @param entity
	 * @return
	 */
    Boolean updateWorkTime(List<PrdTaskQty> entity);

	/**
	 * 生产订单全部暂停
	 * @param map
	 * @return
	 */
	Boolean prdTaskStopAll(JSONObject map) throws Exception;

	Boolean prdTaskEndAll(JSONObject map) throws Exception;
}
